import OSS from "ali-oss";
import {
	axios
} from "./axios.js";


// 阿里云基础地质
export const aliossBaseUrl = 'https://jyapp-fzg.oss-cn-hangzhou.aliyuncs.com/';


// 后端获取阿里云配置信息
export function client() {
	return new Promise((resolve, reject) => {
		axios({
			url: '/alioss/getOssStsToken',
			method: 'get',
			headers: {
				token: uni.getStorageSync("token")
			}
		}).then(res => {
			// console.log(res);
			const ossClient = new OSS({
				region: res.data.region,
				accessKeyId: res.data.accessKeyId,
				accessKeySecret: res.data.accessKeySecret,
				bucket: res.data.bucket,
				authorizationV4: true,
				stsToken: res.data.securityToken,
				refreshSTSToken: refreshSTSToken, // 添加自动刷新函数
				refreshSTSTokenInterval: 600000 // 每 10 分钟刷新一次，可根据实际情况调整
			});
			resolve(ossClient); // 使用 resolve 将创建好的客户端实例返回
		}).catch(err => {
			console.log(err);
			uni.showToast({
				title: '服务器异常！',
				icon: 'error'
			});
			reject(err); // 如果出现错误，使用 reject 传递错误信息
		});
	});
}


// 刷新 STS 令牌的函数
async function refreshSTSToken() {
	try {
		const response = await axios({
			url: '/alioss/getOssStsToken',
			method: 'get',
			headers: {
				token: uni.getStorageSync("token")
			}
		});
		return {
			accessKeyId: response.data.accessKeyId,
			accessKeySecret: response.data.accessKeySecret,
			stsToken: response.data.securityToken
		};
	} catch (error) {
		console.error('刷新 STS 令牌时出错:', error);
		uni.showToast({
			title: '系统异常,请稍后再试...',
			icon: 'error'
		});
		throw error;
	}
}



// 阿里云SDK删除文件
export const deleteOssFile = async (url) => {
	client().then(async res => {
		console.log(res);
		const client = new OSS({
			region: res.options.region,
			accessKeyId: res.options.accessKeyId,
			accessKeySecret: res.options.accessKeySecret,
			authorizationV4: true,
			stsToken: res.options.stsToken,
			// 填写Bucket名称。
			bucket: res.options.bucket,
			refreshSTSToken: refreshSTSToken, // 添加自动刷新函数
			refreshSTSTokenInterval: 600000 // 每 10 分钟刷新一次，可根据实际情况调整
		});
		try {
			const filePath = url.substring(url.indexOf("http://oss-cn-hangzhou.aliyuncs.com/"))
			console.log("删除的文件路径：", filePath);
			// 填写Object完整路径。Object完整路径中不能包含Bucket名称。
			const result = await client.delete(filePath);
			console.log(result);
		} catch (error) {
			console.log(error);
		}
	}).catch(err => {
		console.error("获取凭证失败");
		console.error(err);
	})
}


// 发送给后端删除文件
export const deleteFileByOssUrl = (data) => {
	return axios({
		url: '/alioss/deleteFileByOssUrl',
		method: 'post',
		data:data,
		headers: {
			token: uni.getStorageSync("token")
		}
	})
}


// 后端获取阿里云短信服务验证码
export const getCode = (data) => {
	return axios({
		url: '/alioss/getCode',
		method: 'get',
		params: data
	})
}